import axios from "axios"
import NProgress from 'nprogress';
import 'nprogress/nprogress.css'; // 引入NProgress的样式
import { ElNotification,ElMessageBox,ElLoading  } from 'element-plus'
import Cookie from 'js-cookie'
import router  from '../router';

const TIMEOUT = 10000;
//创建axios实例
const http=axios.create({
    //通用请求的地址前缓
    // baseURL:'https://localhost:5001/Api/',
    baseURL:'http://193.112.146.21:5000/Api/',
    timeout: TIMEOUT,
    headers: {
      'Content-Type': 'application/json'
    }
})

// 添加请求拦截器
http.interceptors.request.use(function (config) {
    config.headers['request-start-time'] = Date.now();

  // 在发送请求之前做些什么
  NProgress.start(); // 设置加载进度条(开始..)
    // 设置请求头token
    const token = Cookie.get('token');
    if (token) {
        config.headers["Authorization"] = `Bearer ${token}`;
    }
  return config;
}, function (error) {


  // 对请求错误做些什么
  NProgress.done(); // 设置加载进度条(结束..)
  return Promise.reject(error);
});

// 添加响应拦截器
http.interceptors.response.use(function (response) {

  //判断token是否还有效
  if (response.data.code===401) {
    // 提示过期
     ElMessageBox.confirm(
      '你的登录信息已过期，需要重新登录！',
      '提示',
      {
        confirmButtonText: '重新登录',
        showCancelButton: false,
        type: 'warning',
        draggable: true,
      }
    )
      .then(() => {
        const loading = ElLoading.service({
          lock: true,
          text: '正在前往..',
          background: 'rgba(0, 0, 0, 0.7)',
        })
        setTimeout(() => {
          Cookie.remove('token')
          router.push('/login');
          loading.close()
        }, 1000)
        
      }).catch(()=>{
          console.log();
      })

     NProgress.done(); // 设置加载进度条(结束..)
  }

  NProgress.done(); // 设置加载进度条(结束..)
  return response;  
  }, function (error) {

    // 计算请求耗时
const requestTime = Date.now() - error.config.headers['request-start-time'];
console.log('请求耗时:', requestTime);
console.log('error:', error);

  // 如果请求超时，可以在这里处理
  if (requestTime >= TIMEOUT) {
    ElNotification.error('请求超时');
    NProgress.done();
  }
  
  if (error.code=='ERR_NETWORK') {
    ElNotification.error('网络错误')
    NProgress.done();
    return
  }
  //  判断异常信息
  if (error.response!==undefined) {
    if (error.response.status == 504 || error.response.status == 404) {
      ElNotification.error('服务器出错,请联系管理员!')
    } else if (error.response.status == 403) {
      ElNotification.error('权限不足,请联系管理员!')
    } else if (error.response.status == 401) {
      ElNotification.error('登录信息已过期,请先登录!')
    } else {
      // 如果响应的有提示信息  则弹出提示信息
      if (error.response.data.message) {
        ElNotification.error(error.response.data.message)
      } else {
        // 没有响应提示信息  则弹出自定义信息
        ElNotification.error('未知错误')
      }
    }
  }

  //结束加载进度条
  NProgress.done(); 
  return Promise.reject(error);
});

export default http